import AMap from "AMap"
// 行政信息搜索
const regionSearch = {
  citySearch: new AMap.DistrictSearch({
    // 关键字对应的行政区级别，country表示国家
    level: 'city',
    // 显示下级行政区级数，1表示返回下一级行政区
    subdistrict: 1,
    // 返回行政区边界坐标点
    extensions: 'all'
  }),
  districtSearch: new AMap.DistrictSearch({
    // 关键字对应的行政区级别，country表示国家
    level: 'district',
    // 显示下级行政区级数，1表示返回下一级行政区
    subdistrict: 0,
    // 返回行政区边界坐标点
    extensions: 'all'
  })
}

// 设置两种状态的地区3d覆盖物
const regionPrism = {
  default(bounds) {
    const prism = new AMap.Object3D.Prism({ path: bounds, height: -3000, color: 'rgba(181,231,64, .2)' })
    prism.transparent = true
    return prism
  },
  hover(bounds) {
    const prism = new AMap.Object3D.Prism({ path: bounds, height: -4000, color: 'rgba(181,231,64, .5)' })
    prism.transparent = true
    return prism
  }
}

const state = {
  mapObj: null,
  regionCode: '440300',
  regionName: '深圳市',
  listRegionObj: [],
  object3Dlayer: new AMap.Object3DLayer(),
  regionPolygonsOverlayGroup: new AMap.OverlayGroup(), // 多边形集合
}

const mutations = {
  // 创建地图
  createMap() {
    state.mapObj = new AMap.Map('main-map',
      {
        zoom: 4, // 级别
        pitch: 40,
        center: [114.061183, 22.540715], // 中心点坐标
        viewMode: '3D', // 使用3D视图
        mapStyle: 'amap://styles/blue'
      })

    // 进入地图的放大效果
    setTimeout(() => {
      state.mapObj.setZoom(11)
    }, 800)
  },
  // 销毁地图
  destoryMap() {
    if (state.mapObj) {
      state.mapObj.destroy()
    }
  },
  // 展示区域
  setRegion() {
    if (state.listRegionObj.length) {
      state.regionPolygonsOverlayGroup.clearOverlays()
      state.object3Dlayer.clear()
      state.listRegionObj = []
    }
    regionSearch.citySearch.search(state.regionCode, async (status, resCity) => {
      for (let i of resCity.districtList[0].districtList) {
        regionSearch.districtSearch.search(i.adcode, async (status, resDist) => {
          const region = resDist.districtList[0]
          let regionObj = {
            regionName: region.name, // 区域编码
            regionCode: i.adcode, // 区域code
            polygonsList: [], // 区域的多边形数组（由数组组成的数组）
            prismsDefaultList: []
          }
          for (let bounds of region.boundaries) {
            let prismDefault = regionPrism.default(bounds) // 默认展示的3d区块

            regionObj.prismsDefaultList.push(prismDefault)
            state.object3Dlayer.add(prismDefault) // 添加默认3d立体图至 3D 图层

            // 生成地区对应polygon
            const polygon = new AMap.Polygon({
              path: bounds,
              strokeWeight: 2,
              strokeColor: '#09f',
              fillOpacity: 0
            })
            regionObj.polygonsList.push(polygon)
            state.regionPolygonsOverlayGroup.addOverlay(polygon) // 添加至多边形覆盖物集合
          }

          state.listRegionObj.push(regionObj)
        })
      }
      // 循环创建多边形与3d覆盖物并添加至相对应图层结束后，将二者图层展示在地图上
      state.regionPolygonsOverlayGroup.setMap(state.mapObj) // 将边界范围组添加到地图上
      state.mapObj.add(state.object3Dlayer) // 将3d图层添加到地图
    })
  }
}

export default {
  state,
  mutations
}